package Ventanas;

import java.awt.EventQueue;
import javax.swing.JButton;

import Paneles.subPanelAdministrador;
import Paneles.subPanelListaTemas;
import Paneles.subPanelListaTemasAdministrador;
import Paneles.subPanelMensajes;
import Paneles.subPanelModerador;
import Paneles.subPanelUsuarioRegistrado;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import javax.swing.JTextField;

import org.orm.ORMDatabaseInitiator;

import ormsamples.CreateProyectoForoDatabaseSchema;
import ormsamples.DeleteProyectoForoData;
import ormsamples.DropProyectoForoDatabaseSchema;

import foroindaltronia.bd.Administrador;
import foroindaltronia.bd.IAdministrador;
import foroindaltronia.bd.IModerador;
import foroindaltronia.bd.Moderador;
import foroindaltronia.bd.Tema;
import foroindaltronia.bd.Tema_no_terminal_oculto;
import foroindaltronia.bd.Tema_no_terminal_visible;


public class VForoAdministrador extends VForo{

	private subPanelAdministrador subVAdministrador;
	private VCrearTemaAdministrador crearTema;
	private VEscribirMensaje escribirMensaje;
	public static JButton btnCrearMensaje;
	public static JButton btnCrearTema;
	private JButton btnEliminar;
	private VBuscar ventanaBuscar;
	public static Administrador administrador;
	public static IAdministrador interfazAdministrador;
	public static Tema temaTerminal;
	
	/**
	 * Launch the application.
	 */
	/**public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					VForoModerador window = new VForoModerador();
					window.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}**/

	
	public VForoAdministrador()
	{
		initialize();
	}
	
	/**
	 * Create the application.
	 */
	public VForoAdministrador(Administrador administrador) {
		super();
			try {
				interfazAdministrador = (IAdministrador) Naming.lookup("rmi://localhost/administrador");
				this.administrador = administrador;
				subVAdministrador = new subPanelAdministrador(this);
				subVAdministrador.setBounds(587, 11, 220, 110);
				getContentPane().add(subVAdministrador);
				initialize();
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NotBoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	
	private void initialize()
	{
		setTitle("Foro Indaltronia: Administrador");
		btnCrearMensaje = new JButton("Crear mensaje");
		btnCrearMensaje.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				escribirMensaje = new VEscribirMensajeAdministrador();
				escribirMensaje.setVisible(true);
			}
		});
		btnCrearMensaje.setBounds(190, 164, 111, 23);
		getContentPane().add(btnCrearMensaje);
		
		btnCrearTema = new JButton("Crear tema");
		btnCrearTema.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
					boolean soloTemaOculto=false;
					if(VForo.temaActual instanceof Tema_no_terminal_oculto)
						soloTemaOculto=true;
					crearTema = new VCrearTemaAdministrador(soloTemaOculto);
					crearTema.setVisible(true);
			}
		});
		btnCrearTema.setBounds(10, 164, 89, 23);
		getContentPane().add(btnCrearTema);
		
		JButton btnBuscarTemaO = new JButton("Buscar...");
		btnBuscarTemaO.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VForoAdministrador.this.dispose();
				DeleteProyectoForoData.main(null);
				//borrarForo();
				VForo.temaActual=null;
				VForoUsuarioNoRegistrado vForoUsuarioNoRegistrado = new VForoUsuarioNoRegistrado();
				vForoUsuarioNoRegistrado.setVisible(true);
				/**ventanaBuscar = new VBuscar();
				ventanaBuscar.setVisible(true);**/
			}
		});
		btnBuscarTemaO.setBounds(686, 164, 111, 23);
		getContentPane().add(btnBuscarTemaO);
		
		btnEliminar = new JButton("Eliminar");
		btnEliminar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				/**if(temaActual != null)
				{
				if(muestraTemas)
					System.out.println(temaActual.getNombre());
				else if(muestraMensajes) {
					System.out.println(temaTerminal.getNombre());
				try {
					interfazAdministrador.eliminarTemaTerminal(temaTerminal);
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				}else
					System.out.println(temaActual.getNombre());
				}**/
				try {
					interfazAdministrador.eliminarMensajesHuerfanos();
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		btnEliminar.setBounds(109, 164, 71, 23);
		getContentPane().add(btnEliminar);
		
		panelListaTemas = new subPanelListaTemasAdministrador();
		scrollPanelListaTemas.setViewportView(panelListaTemas);
		getContentPane().add(scrollPanelListaTemas);
		try {
			((subPanelListaTemasAdministrador)panelListaTemas).actualizarListaTemas(interfazAdministrador.verTemas(VForo.temaActual));
		} catch (RemoteException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		botonVolverListaTemas.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					if(temaActual != null)
					{	
						if(muestraMensajes){
							System.out.println("ADMINISTRADOR, TemaActual: "+VForoAdministrador.temaActual.getNombre());
							actualizarListaTemaTerminal(interfazAdministrador.verTemas(temaActual));
							muestraMensajes=false;
							muestraTemas = true;
							btnCrearMensaje.setEnabled(true);
						}
						else
						{
							System.out.println("ADMINISTRADOR, TemaActual: "+VForoAdministrador.temaActual.getNombre());
							System.out.println("NO MUESTRA MENSAJES!!!");
							
						if(temaActual instanceof Tema_no_terminal_oculto)
						{
							Tema temaPadre = ((Tema_no_terminal_oculto)temaActual).getTema_no_terminal_oculto_padre();
							if(temaPadre == null)
								temaActual = ((Tema_no_terminal_oculto)temaActual).getEsta_en();
							else
								temaActual = temaPadre;
						}
						else if(temaActual instanceof Tema_no_terminal_visible)
							temaActual = ((Tema_no_terminal_visible)temaActual).getTema_no_terminal_visible_padre();
						
						//temaActual = ((Tema_no_terminal_visible)temaActual).getTema_no_terminal_visible_padre();
						Tema[] listaTemas = interfazAdministrador.verTemas(temaActual);
						actualizarListaTemaTerminal(null);
						if(listaTemas.length != 0)
							((subPanelListaTemasAdministrador)panelListaTemas).actualizarListaTemas(listaTemas);
						int index = lblvariable.getText().lastIndexOf(" > ");
						if(index != -1)
								{
									String nuevaCadena = new String(lblvariable.getText().toCharArray(),0,index);
									lblvariable.setText(nuevaCadena);
								}
						else
							lblvariable.setText("Principal");
						}
					}
				} catch (RemoteException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		scrollPanelListaTemas.setColumnHeaderView(botonVolverListaTemas);
		
		actualiarListaTemas();
	}
	
	public void actualiarListaTemas()
	{
		try {
			((subPanelListaTemasAdministrador)panelListaTemas).actualizarListaTemas(interfazAdministrador.verTemas(temaActual));
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void actualizarListaMensajes(String nombrePadre)
	{
		btnCrearMensaje.setEnabled(false);
		subPanelMensajes panelMensajes;
		try {
			temaTerminal =interfazAdministrador.getTemaTerminal(nombrePadre);
			panelMensajes = new subPanelMensajes(interfazAdministrador.buscarMensajesDeTemaTerminal(nombrePadre),administrador);
			System.out.println("Tema terminal administrador: "+VForoAdministrador.temaActual.getNombre());
			System.out.println("Entra a mi metodo");
			panelPrincipal.setColumnHeader(null);
			panelPrincipal.setViewportView(panelMensajes);
			lblvariable.setText(lblvariable.getText()+" > "+nombrePadre);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}